Universo Online
Web Sites Pessoais

Anterior Próximo Índice

Criando um Programa .COM Binário

Esse é um tipo de programa cujo executavel é gerado diretamente pelo NASM, bastando digitar a linha de comando

                    nasm -fbin programa.asm -o programa.com 
e nesse caso, -o significa saída, e programa.com o nome do arquivo de saída. Um programa .COM do tipo binário deve iniciar sempre com a diretiva ORG 0x100, e pode usar a interrupção 0x20 do MSDOS para terminar. Os dados devem ser declarados no final do arquivo e, se no início, deve-se fazer um salto para um rótulo, após os dados, que indica o início das instruções executáveis. Note que tudo que vem após um ponto-e-vírgula é um comentário, e um comentário é sempre igonorado pelo assembler:


;arquivo: pgcom1.asm
;1) Programa com dados após o código executável: 
;digite e salve como pgcom1.asm
;para montar digite: nasm -fbin pgcom1.asm -o pgcom1.com

             ORG 0x100
             
             MOV DX, MENSAGEM
             MOV AH,9
             INT 0x21

             INT 0x20

             MENSAGEM DB "Essa é uma mensagem.",'$'

;arquivo: pgcom2.asm
;2) Programa com dados no início do código executável:
;digite e salve como pgcom2.asm
;para montar digite: nasm -fbin pgcom2.asm -o pgcom2.com

           ORG 0x100
           Inicio: JMP programa
           MENSAGEM DB "Essa é uma mensagem.",'$'
 Programa:
           MOV DX, MENSAGEM
           MOV AH,9
           INT 0x21

           INT 0x20

Note que, no fim do string, existe um caracter dollar ('$'). Esse caracter é usado aqui porque o serviço 9 da interrupção 0x21 do MSDOS precisa saber onde termina o string. A interrupção 0x20 é usada para terminar um programa do tipo .COM. Há outras formas de terminar um programa. Um programa .EXE deve usar outro serviço com AH= 0x4C e AL com retorno de erro para a variável de ambiente ERRORLEVEL, que é usada em arquivos de lote para saber se um programa foi executado sem erro; um valor 0x00 em AL indica execução sem erro. Um programa .COM também pode usar esse serviço para voltar ao DOS. Um arquivo de lote é um arquivo com extensão .BAT, e executa programas como se estes fossem digitados do PROMPT. Algumas vezes é preciso saber se o programa executou com ou sem erro antes de passar para a próxima linha de execução do arquivo de lote. Daí a importâmcia de retornar um valor em AL para a variável ERRORLEVEL antes de encerrar o programa (em C, a função int main( ) faz isso usando return(erro) ). Um programa que executa outro programa (chamado de "programa filho") também tem condições de recuperar o erro retornado pelo filho ao término da execução (mais sobre isso pode ser obtido consultando os serviços da interrupção 0x21 do MS-DOS, que é a sua principal interface para programas aplicativos (ou API, no jargão dos programadores) ).

Anterior Próximo Índice